#include <bits/stdc++.h>
/*
将1,999,1000000,15,999,27 成功离散化
若不排序映射下标就是
1(1),999(2),1e6(3),15(4)....这无法用二分查找到元素15的正确位置（相对位置 15小。999大 ）

0.排序
    1,15,27,999,999,1000000         如果不离散化，用前缀和等把当前值作为下标方便处理的那种情况，开数组到1e6 但是如果离散化，只跟参与操作的
    数的不重复的个数有关

1. 去重操作
    1,15,27,999,1000000    =>得到离散化后的数组应该只需要5个长度即可
2. 将数字映射到正确下标
    1(1),15(2),27(3),999(4),1000000(5)
3.二分查找对应元素离散化后的下标
   15=>2    999=>4
    离散化后数组的长度
*/
using namespace std;
int n;


//1≤n,m≤105,  故开一个1e5+5的数组即可
int a[100000+5]; //所有需要离散化的值


int main()
{

    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }

//排序，左闭右开   
sort(a+1,a+n+1);

//去重，unique返回一个迭代器，指向数组去重后不重复序列中最后的那个元素的下一个元素 (排序后不重复元素的下一个)
//unique并不是删掉了那个重复的元素，而是把它放到了数组末尾，所以unique处理后的数组，一定要求出len，得出真实的数组范围
int len = unique(a+1,a+n+1) - (a+1);   //在a+1,a+n的范围内做unique操作，最后返回不重复的下一个位置 - 初始位置 所以就是长度
//二分查找

for(int i=1;i<=len;i++)
{
    cout<<a[i]<<"'s index   is : ";
    //在有序数组中查找>=a[i]的第一个元素下标
    int index = lower_bound(a+1,a+n+1,a[i])-a;//找到左边界的二分
    cout<<index<<endl;
}

    return 0;
}
